System.Drawing
var input = "10 3 15 10 5 15 5 15 9 2 5 8 5 2 3 6".Split('\t').Select(i => int.Parse(i)).ToArray();
// part 1
var allocations = new List();
var stamp = input.Aggregate("", (a,s) => a+','+s);
while(!allocations.Contains(stamp)) {
allocations.Add(stamp);
var pos = input.Select((i,p) => new { i, p}).First(i => i.i == input.Max()).p;
var m = input[pos];
input[pos] = 0;
while (m > 0){
pos++;
if (pos >= input.Length)
pos = 0;
input[pos]++;
m--;
}
stamp = input.Aggregate("", (a,s) => a+','+s);
}
var part1 = allocations.Count();
part1.Dump();
// part 2
var part2 = allocations.Count() - allocations.IndexOf(stamp);
part2.Dump();